package com.fanghaoran.notes.service;

import com.fanghaoran.notes.bean.MyResult;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.text.ParseException;

/**
 * @Author: win11
 * @Date: 2023/04/18/22:25
 * @Description:
 */
public interface ProductService {

    /**
     * 获取特定商品类型的商品数据 并分页
     * @param page 具体页数
     * @param pageSize 页数
     * @param tId 类型Id
     * @param orderBy   按什么排序
     * @return 返回个数
     * @throws Exception 异常
     */
    MyResult getProductPageByTid(int page,int pageSize,int tId,int orderBy) throws Exception;

    /**
     * 获取相关搜索词的商品数据 并分页
     * @param page 具体页数
     * @param pageSize 总页数
     * @param name 搜索词
     * @param orderBy 根据什么进行排序
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult getProductPageByName(int page,int pageSize,String name,int orderBy) throws Exception;

    /**
     * 获取商品信息
     * @param pId 商品id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult getProductByPid(int pId) throws Exception;

    /**
     * 设为收藏
     * @param uId 用户id
     * @param pId 商品id
     * @param isFavorite 设为收藏
     * @return 返回结果
     * @throws SQLException 异常
     */
    MyResult setAsFavorite(int uId,int pId, int isFavorite) throws SQLException;

    /**
     * 查询收藏
     * @param uId 用户id
     * @param pId 商品id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult getFavoriteByUidAndPid(Integer uId, int pId) throws Exception;

    /**
     * 添加商品
     * @param uId 商家id
     * @param productName 商品名称
     * @param price 商品价格
     * @param stock 商品库存
     * @param productInfo 商品信息
     * @param type 商品类型
     * @param productFile 商品图片
     * @return 返回添加结果
     * @throws SQLException 异常
     */
    MyResult addProduct(int uId,String productName, BigDecimal price, int stock, String productInfo, int type, String productFile) throws SQLException;

    /**
     * 通过商家id获取自己的商品
     * @param uId 商家id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult getProductByUid(Integer uId) throws Exception;

    /**
     * 修改产品
     * @param pId 商品id
     * @param pName 商品名称
     * @param price 商品价格
     * @param stock 商品库存
     * @param pInfo 商品信息
     * @return 返回修改结果
     * @throws SQLException 异常
     */
    MyResult modifyProduct(int pId, String pName, BigDecimal price, int stock, String pInfo) throws SQLException;

    /**
     * 获取商品订单数的排名
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult getProductRank() throws Exception;

    /**
     * 购买后修改商品信息
     * @param pid 商品id
     * @param sales 商家价格
     * @param stock 商品库存
     * @return 返回修改结果
     * @throws SQLException 异常
     */
    MyResult modifyProductAfterBuy(int pid,int sales, int stock) throws SQLException;

    /**
     * 发放优惠券
     * @param pId 商品id
     * @param type 优惠券类型
     * @param amount 优惠券数量
     * @return 返回添加结果
     * @throws Exception 异常
     */
    MyResult sendDiscount(int pId, int type, int amount) throws Exception;

    /**
     * 展示优惠券
     * @param pId 商品id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult showDiscount(int pId) throws Exception;

    /**
     * 展示优惠券的使用情况
     * @param pId 商品id
     * @param uId 用户id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult showUsageOfDiscount(int pId, int uId) throws Exception;

    /**
     * 添加优惠券使用情况数据
     * @param pId 商品id
     * @param uId 用户id
     * @param tId 优惠券类型id
     * @param dAmount 优惠券数量
     * @param dState 优惠券状态
     * @return 返回添加结果
     * @throws SQLException 异常
     */
    MyResult addUsageOfDiscount(int pId, int uId, int tId, int dAmount, int dState) throws SQLException;

    /**
     * 展示优惠券 特定商品特定优惠券类型
     * @param pId 商品id
     * @param tId 优惠券类型id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult showDiscountByPidAndTid(int pId, int tId) throws Exception;

    /**
     * 修改优惠券数量
     * @param pId 商品id
     * @param tId 优惠券类型id
     * @param after 修改后的数量
     * @return 返回修改结果
     * @throws SQLException 异常
     */
    MyResult modifyDiscount(int pId, int tId, int after) throws SQLException;

    /**
     * 展示优惠券的使用情况
     * @param pId 商品id
     * @param uId 用户id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult showDiscountUsageDetail(int pId, int uId) throws Exception;

    /**
     * 修改优惠券的使用情况
     * @param pId 商品id
     * @param uId 用户id
     * @param state 优惠券使用状态
     * @return 返回修改结果
     * @throws SQLException 异常
     */
    MyResult modifyUsageOfDiscount(int pId, int uId,int state) throws SQLException;

    /**
     * 定时修改商品的库存和价格
     * @param pId 商品id
     * @param price 商品价格
     * @param stock 商品库存
     * @param scheduledTime 定义的修改时间
     * @return 返回修改结果
     * @throws ParseException 异常
     */
    MyResult modifyProductInTime(int pId, BigDecimal price, int stock, String scheduledTime) throws ParseException;

    /**
     * 展示邀请码详情
     * @param pId 商品id
     * @param uId 用户id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    MyResult showInviteDetail(int pId, int uId) throws Exception;

    /**
     * 判断邀请码是否在有效时间内
     * @param inviteCode 邀请码
     * @return 返回判断结果
     * @throws Exception 异常
     */
    MyResult isInviteInValidTime(String inviteCode) throws Exception;

    /**
     * 添加邀请码详情
     * @param pId 商品id
     * @param refundCount 优惠半价
     * @param inviteCode 邀请码
     * @param uId 用户id
     * @return 返回添加结果
     * @throws SQLException 异常
     */
    MyResult addInviteDetail(int pId, BigDecimal refundCount, String inviteCode, Integer uId) throws SQLException;

    /**
     * 修改邀请码状态
     * @param pId 商品id
     * @param uId 用户id
     * @param codeState 邀请码状态
     * @return 返回修改状态
     * @throws SQLException 异常
     */
    MyResult modifyInviteState(int pId, Integer uId, int codeState) throws SQLException;

    /**
     * 检查邀请码是否有效
     * @param uId 用户id
     * @param inviteCode 邀请码
     * @return 返回检查结果
     * @throws Exception 异常
     */
    MyResult checkQualification(Integer uId, String inviteCode) throws Exception;
}
